package com.zenithmind.gateway.security;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;

/**
 * 安全配置属性类
 * 专门负责从配置文件中读取安全相关的配置
 * 遵循单一职责原则：只负责配置属性的管理
 */
@Data
@ConfigurationProperties(prefix = "zenithmind.security")
public class SecurityProperties {
    
    /**
     * 是否启用静态安全配置
     */
    private boolean enabled = true;

    /**
     * 公开访问路径列表（不需要认证）
     */
    private List<String> publicPaths = new ArrayList<>();

    /**
     * 受保护路径列表（需要认证）
     */
    private List<String> protectedPaths = new ArrayList<>();
    
    /**
     * 忽略授权验证的URL列表
     */
    private String ignoreUrls = "";
    
    /**
     * 静态配置
     */
    private StaticConfig staticConfig = new StaticConfig();
    
    @Data
    public static class StaticConfig {
        /**
         * 是否启用静态安全配置
         */
        private boolean enabled = true;
        
        /**
         * 公开访问路径（不需要认证）
         */
        private List<String> publicPaths = new ArrayList<>();
        
        /**
         * 受保护路径（需要认证）
         */
        private List<String> protectedPaths = new ArrayList<>();
    }
    
    // 默认公开访问的路径列表
    public static final List<String> DEFAULT_PUBLIC_PATHS = Arrays.asList(
        "/api/zenithMind/verification/sendLoginVerificationCode",
        "/api/zenithMind/verification/login",
        "/api/zenithMind/verification/register",
        "/api/zenithMind/verification/resetPassword",
        "/api/zenithMind/auth/token",
        "/actuator/**",
        "/swagger-ui/**",
        "/v3/api-docs/**",
        "/knife4j/**",
        "/favicon.ico"
    );
}
